
package pe.gob.pj.sri.web.action;

import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;
import org.richfaces.component.html.HtmlDataTable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import pe.gob.pj.sri.bean.PersonaNatural;
import pe.gob.pj.sri.servicio.PersonaService;
import pe.gob.pj.sri.web.util.Constantes;
import pe.gob.pj.sri.web.util.Utilitario;
import pe.gob.pj.sri.web.util.WebMessageUtil;

@Scope("session")
@Controller("personaAction")
public class PersonaAction {
	
	@Autowired
	private static final Logger LOGGER = Logger.getLogger(PersonaAction.class);

	@Autowired
	private PersonaNatural personaNatural;
	
	@Autowired
	private PersonaService personaService;
	
	@Autowired
	private WebMessageUtil messageUtil;
	
	private PersonaNatural dataItem;
	private HtmlDataTable radioDataTable;
	private List<PersonaNatural> listaBusquedaPersonas;
	private String registrosEncontrados;
	private String mensaje;
	private String estiloMensaje;
	private boolean estadoPanelMensajes;
	private List<SelectItem> listaTipoDocumento;
	private String mostrarPanel;
	
	
	public PersonaAction(){
		
		estadoPanelMensajes = false;
		estiloMensaje = Constantes.ESTILO_MENSAJE_VACIO;
		registrosEncontrados = Constantes.VACIO;
		listaBusquedaPersonas = new ArrayList<PersonaNatural>();
		listaTipoDocumento = new ArrayList<SelectItem>();
		mostrarPanel = Constantes.VACIO;
		
	}
	
	
	
	
	
	public String getMostrarPanel() {
		return mostrarPanel;
	}


	public void setMostrarPanel(String mostrarPanel) {
		this.mostrarPanel = mostrarPanel;
	}


	public List<SelectItem> getListaTipoDocumento() {
		return listaTipoDocumento;
	}

	public void setListaTipoDocumento(List<SelectItem> listaTipoDocumento) {
		this.listaTipoDocumento = listaTipoDocumento;
	}

	public PersonaService getPersonaService() {
		return personaService;
	}

	public void setPersonaService(PersonaService personaService) {
		this.personaService = personaService;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public String getEstiloMensaje() {
		return estiloMensaje;
	}

	public void setEstiloMensaje(String estiloMensaje) {
		this.estiloMensaje = estiloMensaje;
	}

	public boolean getEstadoPanelMensajes() {
		return estadoPanelMensajes;
	}

	public void setEstadoPanelMensajes(boolean estadoPanelMensajes) {
		this.estadoPanelMensajes = estadoPanelMensajes;
	}

	public String getRegistrosEncontrados() {
		return registrosEncontrados;
	}

	public void setRegistrosEncontrados(String registrosEncontrados) {
		this.registrosEncontrados = registrosEncontrados;
	}

	public HtmlDataTable getRadioDataTable() {
		return radioDataTable;
	}

	public void setRadioDataTable(HtmlDataTable radioDataTable) {
		this.radioDataTable = radioDataTable;
	}

	public List<PersonaNatural> getListaBusquedaPersonas() {
		return listaBusquedaPersonas;
	}

	public void setListaBusquedaPersonas(List<PersonaNatural> listaBusquedaPersonas) {
		this.listaBusquedaPersonas = listaBusquedaPersonas;
	}
	
	public PersonaNatural getPersonaNatural() {
		return personaNatural;
	}


	public void setPersonaNatural(PersonaNatural personaNatural) {
		this.personaNatural = personaNatural;
	}
	

	public void buscarPersona(){
		
		try {
			dataItem = null;
			listaBusquedaPersonas.clear();
			setRegistrosEncontrados(Constantes.VACIO);
			setMensaje(Constantes.VACIO);
			setEstiloMensaje(Constantes.ESTILO_MENSAJE_VACIO);
			setEstadoPanelMensajes(false);
			
			PersonaNatural  personaNaturalBusqueda = new PersonaNatural();
			personaNaturalBusqueda.setDni(personaNatural.getDni());
			personaNaturalBusqueda.setNombres(personaNatural.getNombres());
			personaNaturalBusqueda.setApellidoPaterno(personaNatural.getApellidoPaterno());
			personaNaturalBusqueda.setApellidoMaterno(personaNatural.getApellidoMaterno());
			
			listaBusquedaPersonas = personaService.listarPersonaNatural(personaNaturalBusqueda);
			
			if (listaBusquedaPersonas.isEmpty()) {
					setRegistrosEncontrados(Constantes.VACIO);
					setMensaje(messageUtil.getMessage("mensaje.busqueda.vacia", null));
					setEstiloMensaje(Constantes.ESTILO_MENSAJE_INFO);
					setEstadoPanelMensajes(true);
			} else {
					setRegistrosEncontrados(messageUtil.getMessage("general.registros.encontrados",
									new String[] { String.valueOf(listaBusquedaPersonas.size()) }));
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			final String msjError = "Error en el m�todo buscarPersona " + listaBusquedaPersonas.size();
			this.setMensaje(Constantes.OCURRIO_ERROR_INESPERADO );
			this.setEstiloMensaje(Constantes.ESTILO_MENSAJE_ERROR);
			this.setEstadoPanelMensajes(true);
			LOGGER.error(Constantes.MENSAJE_ERROR + msjError);
		}
		
		
	}
	
	
	
	
	public PersonaNatural getDataItem() {
		return dataItem;
	}

	public void setDataItem(PersonaNatural dataItem) {
		this.dataItem = dataItem;
	}

	public void establecerElementoSeleccionado() {
		try {
			dataItem = null;
			dataItem = (PersonaNatural) radioDataTable.getRowData();
		} catch (Exception e) {
			LOGGER.error("Error => ");
		}
	}
	
	public String eventoIrRegistrarPersona() {

			return Constantes.REGISTRAR;

	}
	

	private void cargarListaTipoDocumento() {
		try {
			
			//List<TipoDocumento> lista = null; //mantenimientoExpedienteService.obtenerListaTipoDocumento(null);
			/*for (TipoDocumento tipoDocumento : lista) {
				listaTipoDocumento.add(new SelectItem(tipoDocumento.getCodigo(), tipoDocumento.getDescripcion()));
			}*/
			
			listaTipoDocumento.add(new SelectItem("1", "DNI"));
			
		} catch (Exception e) {
			final String msjError = "Error en el m�todo cargarListaTipoDocumento";
			LOGGER.error(Constantes.MENSAJE_ERROR + msjError);
		}
	}
	
	/**
	 * Metodos Get y Set 
	 * 
	 */
	
	public String getIniciar(){
		return "";
	}
	
	public String getIniciarRegistrar() {
		//this.limpiarDatosRegistrar();
		this.setMensaje(Constantes.VACIO);
		this.setEstiloMensaje(Constantes.ESTILO_MENSAJE_VACIO);
		this.setEstadoPanelMensajes(false);
		cargarListaTipoDocumento();
		this.setMostrarPanel(Utilitario.establecerMostrarPanel("pnlConfirmaGuardar", false));
		return Constantes.VACIO;
	}
	
	
	
	public void confirmarRegistrarPersona() {
		try {

				this.setMensaje(Constantes.VACIO);
				this.setEstiloMensaje(Constantes.ESTILO_MENSAJE_VACIO);
				this.setEstadoPanelMensajes(false);
				this.setMostrarPanel(Utilitario.establecerMostrarPanel("pnlConfirmaGuardar", true));
			
		} catch (Exception e) {
			final String msjError = "Error en el m�todo confirmarRegistrarExpediente";
			
			this.setEstiloMensaje(Constantes.ESTILO_MENSAJE_ERROR);
			this.setEstadoPanelMensajes(true);
			LOGGER.error(Constantes.MENSAJE_ERROR + msjError);
		}
	}
	
	public String cancelarConfirmarRegistrarPersona() {
		//this.limpiarDatosRegistrar();
		this.setMensaje(Constantes.VACIO);
		this.setEstiloMensaje(Constantes.ESTILO_MENSAJE_VACIO);
		this.setEstadoPanelMensajes(false);
		return Constantes.CANCELAR;

	}
	
	public void registrarPersona() {
		try {
			PersonaNatural persona = new PersonaNatural();
			persona.setApellidoMaterno(personaNatural.getApellidoMaterno());
			persona.setApellidoPaterno(personaNatural.getApellidoPaterno());
		
			//mantenimientoExpedienteService.registrarExpediente(expediente);
			this.getIniciarRegistrar();
			this.setMensaje(messageUtil.getMessage("general.successfully.created", null));
			this.setEstiloMensaje(Constantes.ESTILO_MENSAJE_EXITO);
			this.setEstadoPanelMensajes(true);
		} catch (Exception e) {
			final String msjError = "Error en el m�todo registrarExpediente";
			this.setMostrarPanel(Utilitario.establecerMostrarPanel("pnlConfirmaGuardar", false));
			this.setEstiloMensaje(Constantes.ESTILO_MENSAJE_ERROR);
			this.setEstadoPanelMensajes(true);
			LOGGER.error(Constantes.MENSAJE_ERROR + msjError);
		}
	}
	
	public void cancelarRegistrarPersona() {
		this.setMostrarPanel(Utilitario.establecerMostrarPanel("pnlConfirmaGuardar", false));
	}
	
	
	
	
	
	

}
